/** @file               sw_util.h
 *  @copyright          Copyright (C) 2006-2026 flyfish (tenggui_fu@126.com)
 *  @brief              This file is part of the swallow library
 *  @author             $Author: Thinkpad $
 *  @version            $Rev: 386 $
 *  @date               $Date: 2016-12-22 15:40:36 +0800 (周四, 22 12月 2016) $
 */
#ifndef __SW_UTIL_H__
#define __SW_UTIL_H__

#ifdef __cplusplus
extern "C" {
#endif

typedef enum _SW_ORDER
{
    SW_O_ASC,
    SW_O_DESC
}SW_ORDER;

typedef enum _SW_DATA_SIZE_TYPE
{
    SW_DST_AUTO,
    SW_DST_BYTE,
    SW_DST_KBYTE,
    SW_DST_MBYTE,
    SW_DST_GBYTE,
    SW_DST_TBYTE,
    SW_DST_PBYTE
}SW_DATA_SIZE_TYPE;

typedef enum _SW_DATA_SIZE_BASE
{
    SW_DSB_1024,
    SW_DSB_1000
}SW_DATA_SIZE_BASE;

SW_API SW_RET SW_InitUtilAPI(SW_VOID);
SW_API SW_RET SW_RunUtilAPI(SW_VOID);
SW_API SW_RET SW_StopUtilAPI(SW_VOID);
SW_API SW_RET SW_ExitUtilAPI(SW_VOID);
SW_API SW_RET SW_GetAppFileName(SW_CHAR *pFileName, SW_UINT32 fileNameLen);
SW_API const SW_CHAR *SW_GetAppFileNameSelf(SW_VOID);
SW_API SW_RET SW_GetAppName(SW_CHAR *pName, SW_UINT32 nameLen);
SW_API const SW_CHAR *SW_GetAppNameSelf(SW_VOID);
SW_API SW_RET SW_GetAppDir(SW_CHAR *pDirName, SW_UINT32 dirNameLen);
SW_API const SW_CHAR *SW_GetAppDirSelf(SW_VOID);
SW_API SW_RET SW_GetAppTmpDir(SW_CHAR *pDirName, SW_UINT32 dirNameLen);
SW_API const SW_CHAR *SW_GetAppTmpDirSelf(SW_VOID);
SW_API SW_RET SW_GetLibTmpDir(SW_CHAR *pDirName, SW_UINT32 dirNameLen);
SW_API const SW_CHAR *SW_GetLibTmpDirSelf(SW_VOID);
SW_API SW_UINT32 SW_StrToUInt32(const SW_CHAR *pStr);
SW_API SW_UINT64 SW_StrToUInt64(const SW_CHAR *pStr);
SW_API SW_INT32 SW_StrToInt32(const SW_CHAR *pStr);
SW_API SW_INT64 SW_StrToInt64(const SW_CHAR *pStr);
SW_API SW_INT16 SW_StrToInt16(const SW_CHAR *pStr);
SW_API SW_UINT16 SW_StrToUInt16(const SW_CHAR *pStr);
SW_API SW_INT8 SW_StrToInt8(const SW_CHAR *pStr);
SW_API SW_UINT8 SW_StrToUInt8(const SW_CHAR *pStr);
SW_API SW_BOOL SW_StrToBool(const SW_CHAR *pStr);
SW_API SW_FLOAT SW_StrToFloat(const SW_CHAR *pStr);
SW_API SW_DOUBLE SW_StrToDouble(const SW_CHAR *pStr);
SW_API SW_RET SW_StrCat(SW_CHAR *pDst, SW_UINT32 dstLen, const SW_CHAR *pSrc);
SW_API SW_CMP SW_StrCmp(const SW_CHAR *pStr1, const SW_CHAR *pStr2, SW_BOOL ignoreCase);
SW_API SW_RET SW_GetEnvStr(const SW_CHAR *pName, SW_CHAR *pValue, SW_UINT32 valueLen);
SW_API SW_RET SW_SetEnvStr(const SW_CHAR *pName, const SW_CHAR *pValue);
SW_API SW_BOOL SW_GetEnvBool(const SW_CHAR *pName);
SW_API SW_RET SW_SetEnvBool(const SW_CHAR *pName, SW_BOOL value);
SW_API SW_INT8 SW_GetEnvInt8(const SW_CHAR *pName);
SW_API SW_RET SW_SetEnvInt8(const SW_CHAR *pName, SW_INT8 value);
SW_API SW_UINT8 SW_GetEnvUInt8(const SW_CHAR *pName);
SW_API SW_RET SW_SetEnvUInt8(const SW_CHAR *pName, SW_UINT8 value);
SW_API SW_INT16 SW_GetEnvInt16(const SW_CHAR *pName);
SW_API SW_RET SW_SetEnvInt16(const SW_CHAR *pName, SW_INT16 value);
SW_API SW_UINT16 SW_GetEnvUInt16(const SW_CHAR *pName);
SW_API SW_RET SW_SetEnvUInt16(const SW_CHAR *pName, SW_UINT16 value);
SW_API SW_INT32 SW_GetEnvInt32(const SW_CHAR *pName);
SW_API SW_RET SW_SetEnvInt32(const SW_CHAR *pName, SW_INT32 value);
SW_API SW_UINT32 SW_GetEnvUInt32(const SW_CHAR *pName);
SW_API SW_RET SW_SetEnvUInt32(const SW_CHAR *pName, SW_UINT32 value);
SW_API SW_INT64 SW_GetEnvInt64(const SW_CHAR *pName);
SW_API SW_RET SW_SetEnvInt64(const SW_CHAR *pName, SW_INT64 value);
SW_API SW_UINT64 SW_GetEnvUInt64(const SW_CHAR *pName);
SW_API SW_RET SW_SetEnvUInt64(const SW_CHAR *pName, SW_UINT64 value);
SW_API SW_FLOAT SW_GetEnvFloat(const SW_CHAR *pName);
SW_API SW_RET SW_SetEnvFloat(const SW_CHAR *pName, SW_FLOAT value);
SW_API SW_DOUBLE SW_GetEnvDouble(const SW_CHAR *pName);
SW_API SW_RET SW_SetEnvDouble(const SW_CHAR *pName, SW_DOUBLE value);
SW_API SW_RET SW_GetEnvArrayBool(const SW_CHAR *pName, SW_BOOL *pValue, SW_UINT32 *pValueLen);
SW_API SW_RET SW_SetEnvArrayBool(const SW_CHAR *pName, const SW_BOOL *pValue, SW_UINT32 valueLen);
SW_API SW_RET SW_GetEnvArrayInt8(const SW_CHAR *pName, SW_INT8 *pValue, SW_UINT32 *pValueLen);
SW_API SW_RET SW_SetEnvArrayInt8(const SW_CHAR *pName, const SW_INT8 *pValue, SW_UINT32 valueLen);
SW_API SW_RET SW_GetEnvArrayUInt8(const SW_CHAR *pName, SW_UINT8 *pValue, SW_UINT32 *pValueLen);
SW_API SW_RET SW_SetEnvArrayUInt8(const SW_CHAR *pName, const SW_UINT8 *pValue, SW_UINT32 valueLen);
SW_API SW_RET SW_GetEnvArrayInt16(const SW_CHAR *pName, SW_INT16 *pValue, SW_UINT32 *pValueLen);
SW_API SW_RET SW_SetEnvArrayInt16(const SW_CHAR *pName, const SW_INT16 *pValue, SW_UINT32 valueLen);
SW_API SW_RET SW_GetEnvArrayUInt16(const SW_CHAR *pName, SW_UINT16 *pValue, SW_UINT32 *pValueLen);
SW_API SW_RET SW_SetEnvArrayUInt16(const SW_CHAR *pName, const SW_UINT16 *pValue, SW_UINT32 valueLen);
SW_API SW_RET SW_GetEnvArrayInt32(const SW_CHAR *pName, SW_INT32 *pValue, SW_UINT32 *pValueLen);
SW_API SW_RET SW_SetEnvArrayInt32(const SW_CHAR *pName, const SW_INT32 *pValue, SW_UINT32 valueLen);
SW_API SW_RET SW_GetEnvArrayUInt32(const SW_CHAR *pName, SW_UINT32 *pValue, SW_UINT32 *pValueLen);
SW_API SW_RET SW_SetEnvArrayUInt32(const SW_CHAR *pName, const SW_UINT32 *pValue, SW_UINT32 valueLen);
SW_API SW_RET SW_GetEnvArrayInt64(const SW_CHAR *pName, SW_INT64 *pValue, SW_UINT32 *pValueLen);
SW_API SW_RET SW_SetEnvArrayInt64(const SW_CHAR *pName, const SW_INT64 *pValue, SW_UINT32 valueLen);
SW_API SW_RET SW_GetEnvArrayUInt64(const SW_CHAR *pName, SW_UINT64 *pValue, SW_UINT32 *pValueLen);
SW_API SW_RET SW_SetEnvArrayUInt64(const SW_CHAR *pName, const SW_UINT64 *pValue, SW_UINT32 valueLen);
SW_API SW_RET SW_GetEnvArrayFloat(const SW_CHAR *pName, SW_FLOAT *pValue, SW_UINT32 *pValueLen);
SW_API SW_RET SW_SetEnvArrayFloat(const SW_CHAR *pName, const SW_FLOAT *pValue, SW_UINT32 valueLen);
SW_API SW_RET SW_GetEnvArrayDouble(const SW_CHAR *pName, SW_DOUBLE *pValue, SW_UINT32 *pValueLen);
SW_API SW_RET SW_SetEnvArrayDouble(const SW_CHAR *pName, const SW_DOUBLE *pValue, SW_UINT32 valueLen);
SW_API SW_RET SW_SortData(SW_VOID *pData, SW_UINT32 dataCount, SW_DATA_TYPE dataType, SW_ORDER order);
SW_API SW_RET SW_SortInt8(SW_INT8 *pData, SW_UINT32 dataCount, SW_ORDER order);
SW_API SW_RET SW_SortUInt8(SW_UINT8 *pData, SW_UINT32 dataCount, SW_ORDER order);
SW_API SW_RET SW_SortInt16(SW_INT16 *pData, SW_UINT32 dataCount, SW_ORDER order);
SW_API SW_RET SW_SortUInt16(SW_UINT16 *pData, SW_UINT32 dataCount, SW_ORDER order);
SW_API SW_RET SW_SortInt32(SW_INT32 *pData, SW_UINT32 dataCount, SW_ORDER order);
SW_API SW_RET SW_SortUInt32(SW_UINT32 *pData, SW_UINT32 dataCount, SW_ORDER order);
SW_API SW_RET SW_SortInt64(SW_INT64 *pData, SW_UINT32 dataCount, SW_ORDER order);
SW_API SW_RET SW_SortUInt64(SW_UINT64 *pData, SW_UINT32 dataCount, SW_ORDER order);
SW_API SW_RET SW_SortFloat(SW_FLOAT *pData, SW_UINT32 dataCount, SW_ORDER order);
SW_API SW_RET SW_SortDouble(SW_DOUBLE *pData, SW_UINT32 dataCount, SW_ORDER order);
SW_API SW_RET SW_SortPointer(SW_VOID **pPointer, SW_UINT32 pointerCount, SW_UINT32 memberOffset, SW_DATA_TYPE memberType, SW_ORDER order);
SW_API SW_RET SW_SortPointerInt8(SW_VOID **pPointer, SW_UINT32 pointerCount, SW_UINT32 memberOffset, SW_ORDER order);
SW_API SW_RET SW_SortPointerUInt8(SW_VOID **pPointer, SW_UINT32 pointerCount, SW_UINT32 memberOffset, SW_ORDER order);
SW_API SW_RET SW_SortPointerInt16(SW_VOID **pPointer, SW_UINT32 pointerCount, SW_UINT32 memberOffset, SW_ORDER order);
SW_API SW_RET SW_SortPointerUInt16(SW_VOID **pPointer, SW_UINT32 pointerCount, SW_UINT32 memberOffset, SW_ORDER order);
SW_API SW_RET SW_SortPointerInt32(SW_VOID **pPointer, SW_UINT32 pointerCount, SW_UINT32 memberOffset, SW_ORDER order);
SW_API SW_RET SW_SortPointerUInt32(SW_VOID **pPointer, SW_UINT32 pointerCount, SW_UINT32 memberOffset, SW_ORDER order);
SW_API SW_RET SW_SortPointerInt64(SW_VOID **pPointer, SW_UINT32 pointerCount, SW_UINT32 memberOffset, SW_ORDER order);
SW_API SW_RET SW_SortPointerUInt64(SW_VOID **pPointer, SW_UINT32 pointerCount, SW_UINT32 memberOffset, SW_ORDER order);
SW_API SW_RET SW_SortPointerFloat(SW_VOID **pPointer, SW_UINT32 pointerCount, SW_UINT32 memberOffset, SW_ORDER order);
SW_API SW_RET SW_SortPointerDouble(SW_VOID **pPointer, SW_UINT32 pointerCount, SW_UINT32 memberOffset, SW_ORDER order);
SW_API SW_RET SW_SortPointerStr(SW_VOID **pPointer, SW_UINT32 pointerCount, SW_UINT32 memberOffset, SW_ORDER order);
SW_API SW_RET SW_HexStrToByte(const SW_CHAR *pStr, SW_UINT8 *pByte, SW_UINT32 *pByteLen);
SW_API SW_UINT64 SW_Pow(SW_UINT32 base, SW_UINT32 expo);
SW_API SW_RET SW_DataSizeToStr(SW_CHAR *pStr, SW_UINT32 strLen, SW_UINT64 size, SW_DATA_SIZE_TYPE type, SW_DATA_SIZE_BASE base);
SW_API const SW_CHAR *SW_DataTypeToStr(SW_DATA_TYPE type);
SW_API SW_UINT32 SW_DataTypeToByte(SW_DATA_TYPE type);
SW_API SW_RET SW_TrimStrLeft(const SW_CHAR *pStr, SW_CHAR *pNewStr, SW_UINT32 newStrLen);
SW_API SW_RET SW_TrimStrLeftSelf(SW_CHAR *pStr);
SW_API SW_RET SW_TrimStrRight(const SW_CHAR *pStr, SW_CHAR *pNewStr, SW_UINT32 newStrLen);
SW_API SW_RET SW_TrimStrRightSelf(SW_CHAR *pStr);
SW_API SW_RET SW_TrimStr(const SW_CHAR *pStr, SW_CHAR *pNewStr, SW_UINT32 newStrLen);
SW_API SW_RET SW_TrimStrSelf(SW_CHAR *pStr);
SW_API SW_RET SW_ParseStr(const SW_CHAR *pStr, const SW_CHAR **pDelim, SW_UINT32 delimNum, SW_CHAR **pParsedStr, SW_UINT32 *pParsedStrNum, SW_UINT32 parsedStrLen);
SW_API SW_UINT32 SW_Rand(SW_VOID);

#ifdef __cplusplus
}
#endif

#endif

